package controllers

import (
	"fmt"
	"ginvueadmin/global"
	resp "ginvueadmin/models/response"

	"github.com/gin-gonic/gin"
	"github.com/mojocn/base64Captcha"
)

var store = base64Captcha.DefaultMemStore

// @Tags base
// @Summary 生成验证码
// @accept application/json
// @Success 200 {string} {"success", true, "data": {}, "msg": "获取成功"}
// @Router post /base/captcha
func Captcha(c *gin.Context) {
	/*
		1. 创建 base64Captcha 库调用 NewDriverDigit 方法生成验证码驱动器（driver），该驱动器使用数字的形式生成验证码图片。参数包括图片高度、宽度、验证码长度、噪点比例和干扰线条数。
		2. 创建验证码实例（captcha），使用之前创建的驱动器 (driver) 和存储引擎（store）。这个验证码实例将用于生成验证码图片和验证用户输入。
		3. 验证码实例的 Generate 方法来生成验证码。它返回了生成的验证码 ID、base64 编码的图片数据和可能出现的错误。
			a. 若有 err，则返回获取数据失败
			b. 若创建成功，则返回成功的响应
	*/

	dirver := base64Captcha.NewDriverDigit(global.CONFIG.Captcha.ImgHeight, global.CONFIG.Captcha.ImgWidth, global.CONFIG.Captcha.KeyLong, 0.7, 80)
	cp := base64Captcha.NewCaptcha(dirver, store)

	id, b64s, err := cp.Generate()
	if err != nil {
		global.FailWithMessage(fmt.Sprintf("获取数据失败，%v", err), c)
	} else {
		global.OkDetailed(resp.SysCaptcha{
			CaptchaId: id,
			PicPath:   b64s,
		}, "验证码获取成功", c)
	}
}
